2023/12/231636字符

作用域

  1. 作用域因函数的产生而产生,作用域属于一个函数,一个函数产生了作用域
  2. 对象可以有属性,一切为对象的东西就都可以有属性
function a(){}
var glob = 100;
a();
// 1.函数被定义 a.[[scope]] --> 0 : GO{}
// 2.函数被执行 a.[[scope]] --> 0 : AO{}
                            // 1 : GO{}

a.[[scope]] 隐式属性,不可调用

function test(){
    var a = 123;
    function demo(){
        var b = 234;
        console.log(a);  //--> 123
    }
    demo();
    console.log(b);  // 报错 b is not defined
}
test();

作用域链

function a () {
    function b () {
        var b = 234;
        var a = 345;
    }
    var a = 123;
    b();
    console.log(a);
}
var glob = 100;
a();
function a () {
    function b () {
        function c () {}
        c();
    }
    b();
}
a();
// a 函数被定义 a.[[scope]] --> 0 :   GO
// a 函数被执行 a.[[scope]] --> 0 : a AO
                            // 1 :   GO

// b 函数被定义 b.[[scope]] --> 0 : a AO
                            // 1 :   GO
// b 函数被执行 b.[[scope]] --> 0 : b AO
                            // 1 : a Ao
                            // 2 :   GO
                            
// c 函数被定义 c.[[scope]] --> 0 : b AO
                            // 1 : a Ao
                            // 2 :   GO
// c 函数被执行 c.[[scope]] --> 0 : c AO
                            // 1 : b AO
                            // 2 : a Ao
                            // 3 :   GO